package com.hmy.finance.service.core;

import com.hmy.finance.api.bo.core.request.*;
import com.hmy.finance.api.bo.core.response.*;
import com.hmy.finance.service.core.dto.RefreshContractAccountOfAgeDto;
import com.hmy.finance.service.core.rdto.RefreshContractAccountOfAgeRdto;

public interface IFinancialCoreDataService {
    /**
     * 开始租赁
     *
     * @param request 请求
     * @return 结果
     * @author songkf
     */
    StartRentalResponse startRental(StartRentalRequest request);

    /**
     * 结束租赁
     *
     * @param request 请求
     * @return 结果
     * @author songkf
     */
    TerminationRentalResponse terminationRental(TerminationRentalRequest request);

    /**
     * 应收调整生成损益
     *
     * @param request 请求
     * @return 结果
     * @author songkf
     */
    BaseGenerateProfitLossResponse rentalAdjustmentProfitLoss(ReceivableAdjustGenerateRequest request);

    /**
     * 索赔生成损益
     *
     * @param request 请求
     * @return 结果
     * @author songkf
     */
    BaseGenerateProfitLossResponse claimGenerateProfitLoss(ClaimGenerateRequest request);

    /**
     * 报停生成损益
     *
     * @param request 请求
     * @return 结果
     * @author songkf
     */
    BaseGenerateProfitLossResponse pauseGenerateProfitLoss(PauseGenerateRequest request);

    /**
     * 查询设备租赁记录剩余暂停天数
     *
     * @param request 请求参数
     * @return 响应结果
     * @author songkf
     */
    QueryDeviceRentalRecordRemainingPauseDayResponse queryDeviceRentalRecordRemainingPauseDay(QueryDeviceRentalRecordRemainingPauseDayRequest request);

    /**
     * 合同退场停止生成流水和冲抵
     *
     * @param request 请求
     * @return 结果
     * @author songkf
     */
    ContractTerminationStopFlowAndOffsetResponse contractTerminationStopFlowAndOffset(ContractTerminationStopFlowAndOffsetRequest request);

    /**
     * 合同取消停止生成流水和冲抵
     *
     * @param request 请求
     * @return 结果
     * @author songkf
     */
    ContractCancelStopFlowAndOffsetResponse contractCancelStopFlowAndOffset(ContractCancelStopFlowAndOffsetRequest request);

    /**
     * 补录报停费用损益计算
     *
     * @param request 请求
     * @return 结果
     * @author songkf
     */
    SupplementaryPauseAmountCalculateResponse calculateSupplementaryPauseDeviceFee(SupplementaryPauseAmountCalculateRequest request);

    SupplementaryPauseGenerateResponse generateSupplementaryPause(SupplementaryPauseGenerateRequest request);

    RefreshContractAccountOfAgeRdto refreshContractAccountOfAge(RefreshContractAccountOfAgeDto refreshDto);
}
